Estoy jugando con las nuevas vistas asíncronas de Django 3.1.
Algunos de los beneficios que me encantaría tener es hacer algunas "tareas" simples de disparar y olvidar después de que la vista ya haya dado su HttpResponse , como enviar una notificación automática o enviar un correo electrónico. ¡No estoy buscando soluciones con paquetes de terceros como el apio!
Para probar estas vistas asíncronas, utilicé un código de este tutorial: https://testdriven.io/blog/django-async-views/
async def http_call_async(): for num in range(1, 200): await asyncio.sleep(1) print(num) # TODO: send email async print('done') async def async_view(request): loop = asyncio.get_event_loop() loop.create_task(http_call_async()) return HttpResponse("Non-blocking HTTP request")Inicié el servidor django con uvicorn.
Cuando realizo una solicitud a esta vista, devolverá inmediatamente la respuesta HTTP "Solicitud HTTP sin bloqueo".
Mientras tanto y después de la respuesta HTTP, el ciclo de eventos continúa felizmente para imprimir los números hasta 200 y luego imprimir "hecho".
Este es exactamente el comportamiento que quiero utilizar para mis tareas de disparar y olvidar.
Desafortunadamente, no pude encontrar ninguna información sobre la vida útil del ciclo de eventos que ejecuta este código.
¿Cuánto tiempo vive el bucle de eventos? ¿Hay un tiempo de espera? ¿De qué depende? ¿En uvicornio? ¿Es eso configurable?
¿Hay algún recurso que discuta este tema?